package com.javajun.spider.bt7086.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.javajun.spider.bt7086.pipeline.VideoPipeline;
import com.javajun.spider.bt7086.processor.Bt7086PageProcessor;

import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.ConsolePipeline;

@RestController
@RequestMapping(value = "/spider-task")
public class SpiderController {
	
	private Spider spider = Spider.create(new Bt7086PageProcessor());

	@RequestMapping()
	public Object Thi() {
		return "project is ok!";
	}

	@RequestMapping(value = "/run")
	public Object HelloVoid() {

		/**
		 * 因为开一个线程需要实现 Runnable 接口，可以在 new Thread 中进行匿名内部类
		 * 而jdk8中的新特性 lambda 表达式则可以避免过多的定义匿名内部类。
		 * Lambda 表达式，也可称为闭包，它是推动 Java 8 发布的最重要新特性。
		 * Lambda 允许把函数作为一个方法的参数（函数作为参数传递进方法中）。
		 * 使用 Lambda 表达式可以使代码变的更加简洁紧凑。
		 */
		// jdk8 简化  lambda表达式
		new Thread(() -> {
			// Spider.create(new Bt7086PageProcessor());
			
			spider
			.addUrl("http://k6.csnmdcjnx.com/pw/thread.php?fid=111")
			.addPipeline(new ConsolePipeline()).addPipeline(new VideoPipeline())
			// .setScheduler(new FileCacheQueueScheduler("webmagic-urls"))
			.thread(3)
			.start();
			
		}).run();
		
		return "spider is starting";
	}
	
	@RequestMapping(value = "/stop")
	public Object stopSpider() {
		spider.stop();
		return "spider is stoped!";
	}

}
